<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta
      name="viewport"
      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
    />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body></body>
</html>
<script>
  // 手写 instanceof 方法
  //     instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。
  // 实现步骤：
  //
  // 首先获取类型的原型
  //     然后获得对象的原型
  //     然后一直循环判断对象的原型是否等于类型的原型，直到对象原型为 null，因为原型链最终为 null

  function myInstanceof(left, right) {
    let proto = Object.getPrototypeOf(left), // 获取对象的原型
      prototype = right.prototype; // 获取构造函数的 prototype 对象

    // 判断构造函数的 prototype 对象是否在对象的原型链上
    while (true) {
      if (!proto) return false;
      if (proto === prototype) return true;

      proto = Object.getPrototypeOf(proto);
    }
  }
</script>
